package com.loe.test

import android.os.Bundle
import android.util.Log
import androidx.annotation.Keep
import androidx.appcompat.app.AppCompatActivity
import com.loe.json_ext.*
import kotlinx.android.synthetic.main.activity_main.*
import org.json.JSONArray
import org.json.JSONObject

class MainActivity : AppCompatActivity()
{
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 字符串转Json
        val json = Json("{'名称':'顺哥哥','age':26,'sex':true,'资金':123.56}")

        // --加入复杂列表结构
//        json.put("childList", JsonArray()
//            .put(Json("name","小不点").put("age",66))
//            .put(Json().put("name","汤姆")))

        // Json转Bean
        val people = json.toBean<People>()

        // Bean转Json
        val json2 = people.toJson()


//        val js = JsonArray()
//        js.put(Json().put("name", "卡扣式蒋介石的肯定"))
//        js.put(Json().put("name", "jdhf发动机地方"))
//        js.put(Json().put("name", "都很谨慎的111122"))
//
//        val list = listOf("收到就好的", "黄飞鸿的","sdsdsd是多少", "绝代风华")

//        textView.text = js.map<JSONObject> { it.gotString("name") }.toString()
//        textView.text = js.map("name").toString()

//        textView.text = js.filter<JSONObject> { !it.gotString("name").startsWith("j") }.toString()

//        textView.text = list.mapNotNull { if(it.length > 4) it }.joinToString(",")


//        val user: User = "{'name':'顺哥哥','age':23,'sex':true}".toBean()
//        textView.text = user.toJsonString()


//        var js = listOf("是的是的", "ksdj公司").toJsonArray()
//
//        val json = Json("{'名称':'顺哥哥','age':261213456789123456789,'sex':'1','资金':123.56}")
//        textView.text = json.gotInt("age").toString()
//        Log.d("runtime", People().toJson().toString(4))
//        js.toList(People::class.java)
//        val b = json.toBean(People::class.java)
//
//        js.filter<JSONObject>()
//        {
//            it.gotInt("age ") < 30
//        }


        val b = jsOf(Json("{'sex': '0','name':123.56}"), Json("{'sex': 2,'name':0.56}"))

        textView.text =
            b.isEmpty().toString() + "\n" +
                JsonArray().isEmpty() + "\n" +
                jsOf("").isEmpty() + "\n" +
                Json().isEmpty() + "\n" +
                Json("", 2).isEmpty() + "\n" +
                Json("name", false).isEmpty()
//
//        val bean = Json("{'time': '2021年5-11','sex': '0','name':123.56,'money':22.50,'address':'安徽多喝点水党的光辉'}").toBean<Child>()
//        bean.name = "顺哥哥"
//        textView.text = bean.toJsonString(4)


//        val list = jsOf(
//            JsonArray()
//                .put("顺哥哥")
//                .put("28"),
//            JsonArray()
//                .put("顺哥哥")
//                .put("28"),
//            JsonArray()
//                .put("顺哥哥")
//                .put("28"),
//            ).toList<JSONObject>()

//        textView.text = b.map("sex").join(",")

//        var json = Json("{'名称':'顺哥哥','age':26,'sex':true,'资金':123.56}")
//
//        json + Json().put("money", 1688).put("app", "空间的开发京东客服")

        class Node
        {
            var name = ""
            var age = 0
            var sex = false

            var child = Json()

            var imgs = JsonArray()
        }

        val node = Json()
            .put("name", "顺哥哥")
            .put("age", 28)
            .put(
                "child", Json()
                    .put("cName", "快的话")
                    .put("cAge", "99")
            )
            .put("imgs", jsOf("img1", "img2"))
            .toBean<Node>()

//        textView.text = node.toJsonString(4)
    }

    @Keep
    class People
    {
        @JsonName("名称")
        var name: String = ""

        var age = 0

        var sex = true

        @JsonName("资金")
        var money: Double? = null

        var childList: List<Child>? = null
    }

    @Keep
    class Child
    {
//        var rootJson: JSONObject? = null


        var name = ""

        var age: Int? = null

        var sex = false

        var time: XTime? = null

        fun init(data: JSONObject)
        {
            time = XTime(data.gotString("time"))
        }

        fun out(data: JSONObject): JSONObject
        {
            data.put("time", time?.toTimeMillis())
            return data
        }

//        var money = false
    }
}